/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.tesoreria.bc;

import java.util.Date;
import javax.persistence.EntityManager;
import org.cip.esymons.general.be.Solicitante;
import org.cip.esymons.tesoreria.adapters.DeudaCuentaIngreso;
import org.cip.esymons.tesoreria.be.DetDocupago;
import org.cip.esymons.tesoreria.be.DetPagoAgrupado;
import org.cip.esymons.tesoreria.be.DocumentoPago;
import org.cip.esymons.tesoreria.be.EnumEstadoMovimiento;
import org.cip.esymons.tesoreria.be.MovimientoCuenta;

/**
 *
 * @author Gilmar Montoya
 */
public class DocumentoPagoConcreto implements DocumentoPagoInterfaz {

    public DocumentoPago generarDocumentoPago(EntityManager em, Solicitante solicitante, DocumentoPago documentoPago, DeudaCuentaIngreso deudaCuentaIngreso) {
        documentoPago.setDocFecha(new Date());
        documentoPago.setFkSolCodigo(solicitante);
        em.persist(documentoPago);
        return documentoPago;
    }

    public void generarDetalles(EntityManager em, Solicitante solicitante, DocumentoPago documentoPago, DeudaCuentaIngreso deudaCuentaIngreso, boolean realizarPago) {
        for (DetPagoAgrupado dxci : deudaCuentaIngreso.getListaDeudaxIngreso()) {
            dxci.setDocCodigo(documentoPago);
            em.persist(dxci);
            for (MovimientoCuenta mc : dxci.getListaMovimientos()) {
                DetDocupago detDocupago = new DetDocupago();
                detDocupago.setDdpMontopago(mc.getMcuSaldo());
                detDocupago.setPagoAgrupado(dxci);
                detDocupago.setMcuCodigo(mc);                
                em.persist(detDocupago);
                if (realizarPago) {
                    mc.setEstado(EnumEstadoMovimiento.Pagada);
                    mc.setMcuSaldo(0D);
                    em.merge(mc);
                }
            }
        }
    }

    public Double calcularPago(MovimientoCuenta movimientoCuenta) {
        double saldo = movimientoCuenta.getMcuSaldo();
        movimientoCuenta.setMcuSaldo(0D);
        return saldo;
    }
}
